home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / sys / kowin14d.lzh / doc / library / mm_alloc.man < prev    next >
Text File  |  1995-11-23  |  5KB  |  118 lines

  1.  
  2.   完全オリジナルのメモリ管理ルーチン mm_alloc ライブラリ
  3.     Copyright 1995 Ogasawara Hiroyuki (COR.)
  4.  
  5.   このライブラリは Ko-Window 上からも使用できるヒープ領域の自動拡張型 malloc
  6. ライブラリです。Ko-Window 上からの使用の場合、XClib でも libc でもどちらから
  7. でも使用できます。ただし必ず他のライブラリより先に1番最初にリンクして下さい。
  8.  
  9.     mm_klib.a    Ko-Window 用
  10.     mm_alib.a    一般用
  11.  
  12.  
  13. 1. 互換ルーチン
  14.  
  15. void    *malloc( size )
  16. -------------------------------------------------------------------------------
  17. int    size;
  18.  
  19.     指定サイズヒープからメモリを確保し、そのポインタを返します。もしヒー
  20.     プ領域が足りなくてメモリが確保できない場合は、空きメモリがある限り自
  21.     分でヒープ領域を拡大します。Ko-Window 上での使用も当然 OK です。それ
  22.     でもメモリが確保できない場合は NULL を返します。なお、確保するアドレ
  23.     スは必ず偶数番地(実際は4byte単位)になります。拡張する場合のヒープ領
  24.     域の単位は変数 mm_BlockSize に設定することができます。(デフォルトは
  25.     64Kbyte 単位)
  26. -------------------------------------------------------------------------------
  27.  
  28. void    free( ptr )
  29. -------------------------------------------------------------------------------
  30. void    *ptr;
  31.  
  32.     malloc() で確保したメモリを開放します。malloc() で得たポインタ以外の
  33.     アドレスを渡してはいけません。なお、この関数で確保したメモリを全部開
  34.     放したとしても、malloc() で拡大されたヒープ領域は小さくはなりません。
  35. -------------------------------------------------------------------------------
  36.  
  37. void    *realloc( ptr, size )
  38. -------------------------------------------------------------------------------
  39. void    *ptr;
  40. int    size;
  41.  
  42.     malloc() で確保したメモリのサイズを変更し、新たなアドレスを返します。
  43.     サイズ変更できなかった場合は NULL を返します。
  44. -------------------------------------------------------------------------------
  45.  
  46. void    *calloc( count, size )
  47. -------------------------------------------------------------------------------
  48. int    count;
  49. int    size;
  50.  
  51.     size サイズで count 個分のメモリを確保し、ゼロクリアしたのちそのアド
  52.     レスを返します。内部で malloc() を呼び出しています。戻り値や基本的な
  53.     動作は malloc() と同じです。
  54. -------------------------------------------------------------------------------
  55.  
  56.  
  57.  
  58. 2. ヒープ確保ルーチン
  59.  
  60.   このライブラリで使用するヒープ領域は、C 言語のスタートアップルーチンでは初
  61. 期化されません。そのため、あらかじめ以下の3種類の方法のうちどれかで初期化を
  62. しなければなりません。
  63.  
  64.     (1) Ko-Window アプリケーションの場合
  65.         他のライブラリより先に mm_klib.a をリンクして下さい。それだ
  66.         けで OK です。初期ヒープサイズは WindowHeapSize で与えます。
  67.         MiniTERM(mtmlib) でも当然使えます。
  68.         ただし、GlobalInit/GlobalExit を使用しているアプリケーション
  69.         では使えません。(普通そういうアプリはありません)
  70.  
  71.     (2) 初期ヒープとしてシステムヒープを利用する場合。
  72.         mm_new_heap_init()/mm_new_heap_quit() を使う
  73.  
  74.     (3) 初期ヒープは使わずすべて自分でメモリ管理るする場合
  75.         mm_heap_init()/mm_heap_quit() を使う
  76.  
  77.  
  78.  
  79.  
  80. void*    mm_heap_init( size )
  81. -------------------------------------------------------------------------------
  82. int    size;
  83.  
  84.     専用のヒープ領域を新たに確保します。確保できなければ NULL を返します。
  85.     この関数で確保するヒープ領域は、通常のプロセスのヒープ領域とは異なっ
  86.     ています。システムのヒープ領域が 0 で、新たに確保する必要がある場合
  87.     に使用して下さい。このヒープ領域を開放する場合は必ず mm_heap_quit()
  88.     を使用して下さい。
  89. -------------------------------------------------------------------------------
  90.  
  91. void*    mm_heap_quit()
  92. -------------------------------------------------------------------------------
  93.     mm_heap_init() で確保したヒープ領域を全部開放します。プログラムの終
  94.     了時に呼び出します。
  95. -------------------------------------------------------------------------------
  96.  
  97. void*    mm_new_heap_init( ptr, size )
  98. -------------------------------------------------------------------------------
  99. void    *ptr;
  100. int    size;
  101.  
  102.     すでにあるメモリブロックの先頭アドレスとポインタを与えて、それをこの
  103.     ライブラリようの初期ヒープエリアとして使用します。このヒープ領域を開
  104.     放する場合は必ず mm_new_heap_quit() を使用して下さい。
  105. -------------------------------------------------------------------------------
  106.  
  107. void*    mm_new_heap_quit()
  108. -------------------------------------------------------------------------------
  109.     mm_new_heap_init() で確保したヒープ領域を全部開放します。プログラム
  110.     の終了時に呼び出します。このルーチンは mm_heap_quit() とは違い、最初
  111.     のメモリブロックは開放しません。
  112. -------------------------------------------------------------------------------
  113.  
  114.  
  115.  
  116. 小笠原博之 oga@dgw.yz.yamagata-u.ac.jp
  117. DenDenNET: DEN0006 COR.
  118.